/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package code;

/**
 *
 * @author Catarina
 */

import java.util.*;
import java.io.*;

public class User implements Serializable{
    
    private String nome;
    private String nick;
    private String morada;
    private String mail;
    
    private TreeMap<String, User> amigos;
    private TreeSet<User> pedidos;
    
    public User(){
        nome = " ";
        nick = " ";
        morada = " ";
        mail = " ";
        amigos = new TreeMap<String, User>();
        pedidos = new TreeSet<User>();
    }
    
    public User(User us){
        nome = us.getNome();
        nick = us.getNick();
        morada = us.getMorada();
        mail = us.getMail();
        amigos = us.getAmigos();
        pedidos = us.getPedidos();
    }
    
    public User(String nickname, String nome, String mail, String morada){
        /*
        HashMap<String, User> novoAmigos = new HashMap<String, User();
        HashSet<String> novoPedidos = new HashSet<String>();
        */
        
        
        this.nick = nickname;
        this.nome = nome;
        this.mail = mail;
        this.morada = morada;
        
        amigos = new TreeMap<String, User>();
        pedidos = new TreeSet<User>();
        
        /*
        for(String s1 : amigos) novoAmigos.add(s1);
        this.amigos = novoAmigos;
        
        for(String s2 : pedidos) novoPedidos.add(s2);
        this.pedidos = novoPedidos;
        */
    }
    
    
    public String getNome(){
        return nome;
    }
    
    public String getNick(){
        return nick;
    }
    
    public String getMorada(){
        return morada;
    }
    
    public String getMail(){
        return mail;
    }
    
    public TreeMap<String, User> getAmigos(){
        TreeMap<String, User> novo = new TreeMap<String, User>();
        for(User us : amigos.values()) novo.put(us.getNick(), us);
        return novo;
    }
    
    public TreeSet<User> getPedidos(){
        TreeSet<User> novo = new TreeSet<User>();
        for(User us : pedidos) novo.add(us);
        return novo;
    }
    
    public void setNome(String nome){
        this.nome = nome;
    }
    
    public void setNick(String nick){
        this.nick = nick;
    }
    
    public void setMorada(String morada){
        this.morada = morada;
    }
    
    public void setMail(String mail){
        this.mail = mail;
    }
    
    @Override
    public User clone(){
        return new User(this);
    }
    
    public void addAmigo(User us){
        amigos.put(us.getNick(), us);
    }
    
    public void addPedido(User us){
        pedidos.add(us);
    }
    
    public void removeAmigo(User us){
        amigos.remove(us.getNick());
    }
    
    public void removePedido(User us){
        pedidos.remove(us);
    }
    
    public String toStringAmigos(){
        StringBuilder arr = new StringBuilder();
        arr.append("\nAMIGOS \n");
        for(User us : amigos.values()){
            arr.append("Nome: " + us.getNome() + "\n");
            arr.append("Nickname: " + us.getNick() + "\n\n");
        }
        return arr.toString();
    }
    
    public String toStringPedidos(){
        StringBuilder arr = new StringBuilder();
        arr.append("PEDIDOS DE AMIZADE \n Pedidos de: \n");
        for(User us : pedidos){
            arr.append(us.getNick() + "\n");
        }
        return arr.toString();
    }
    
    public String toStringSimples(){
        StringBuilder arr = new StringBuilder();
        arr.append("Nome: " + this.getNome() + "\n");
        arr.append("Nickname: " + this.getNick() + "\n");
        return arr.toString();
    }
    
    @Override
    public String toString(){
        StringBuilder us = new StringBuilder();
        us.append("UTILIZADOR \n");
        us.append("Nome: " + this.getNome() + "\n");
        us.append("Nickname: " + this.getNick() + "\n");
        us.append("Morada: " + this.getMorada() + "\n");
        us.append("Mail: " + this.getMail() + "\n\n");
        
        us.append(this.toStringAmigos());
        us.append(this.toStringPedidos());

        return us.toString(); }
    
}
